The Basics of Autotools
Major Autotools Components
Autotools 是相关软件包的集合,这些软件包一起使用时,可以消除创建可移植软件时遇到的许多困难。这些工具和一些相对简单的上游提供的输入文件以其,用于为软件包创建构建系统。
图1 A basic overview of how the main autotools components fit together.
A basic overview of how the main autotools components fit together.
在一个简单的设置中:
autoconf程序从configure.in或configure.ac中产生configure脚本(见下面的 NOTE)。automake程序从Makefile.am中产生Makefile.in。configure脚本从Makefile.in文件中产生一个或多个Makefile文件。make程序使用Makefile来编译程序。
NOTE:
configure.in名字曾经是标准。然而,GNU 文档现在建议使用configure.ac因为当处理它时会更清楚该使用哪个程序。两个文件具有相同的用途并且具有相同的格式 —— 唯一的区别时名称。
你可能会看到在各个阶段函数都使用了 autotools。src_prepare 函数时在配置和编译之前处理源代码的最适合的位置。特别是,src_prepare 在 src_cofigure 之前调用,src_cofigure 通常期望 configure 脚本存在。
autoreconf 工具据推测可以根据需要运行 autoconf (以及 automake 、 autoheader 、 aclocal 、 autopoint 和 libtoolize )。有时运行起来没问题。一些软件包附带了一个名为 autogen.sh 的 shell 脚本,该脚本会执行相同的操作(与 autogen 无关)。autotools.eclass 包含了与它们名字对应的独立工具的 helper 函数,例如 eautoconf 和 eautomake 。
Warning:你必须不能尝试修改在运行
configure和make之间生成的任何文件。这可能会导致 autotools 尝试变得更加聪明并且重建文件,进而导致你的更改被删除。在一些情况下,这还会导致./configure参数被悄然删除,这可能会破坏依赖关键。最佳的的处理方法通常是改用.ac=/=.in文件。
The configure.ac File
configure.ac 文件用来创建 /.configure 脚本。它包括一系列由 autoconf 处理和展开的宏。这些宏可以检查软件包和库,处理 --enable 和 --with 的切换,并且生成各种文件。